webpack - js懒加载和预加载

现在src/index.html文件中添加一个button

<button id="btn">加载文件</button>

然后新创建lazyload.js文件

//lazyload.js
console.log('lazyload文件被加载了');

export function print() {
    console.log('我是lazyload文件');
}

src/js/index.js文件中,加入按钮事件。

正常使用

import {print} from './lazyload'
document.getElementById('btn').addEventListener('click', function(){
  console.log('点击了加载文件按钮');
  print()
})

可以看到,只要import文件就会自动加载文件。

懒加载

懒加载,其实就是在需要的时候在加载;

所以可以使用,import('文件')来实现:

document.getElementById('btn').addEventListener('click', function(){
  console.log('点击了加载文件按钮');
  import(/* webpackChunkName: 'lazyload' */'./lazyload').then(({print}) => {
    print();
  })
})

可以看见lazyload.js文件是在按钮点击之后,才被下载使用;

image-20210408001657361

要注意上面说的,点击按钮后才下载

在还未按钮前,在控制台的Network只看js文件的下载

image-20210408002134452

可以看到,并没有lazyload.js文件,而点击了按钮之后

image-20210408002212745

才下载lazyload.js文件,然后使用。

当前多次点击,也只会下载一次js文件

预加载

预加载,其实就是预先加载好文件,当需要使用的时候直接使用加载的文件即可;

主要还是在import中加入webpackPrefetch: true

import(/* webpackChunkName: 'lazyload', webpackPrefetch: true */'./lazyload').then(({print}) => {
  print();
})

重新构建之后,运行,在控制台的Networkall

image-20210408002750170

可以看到,在未点击按钮前,lazyload.js文件已经被下载。

点击按钮之后,是直接读取之前已下载的lazyload.js文件。

image-20210408003036154

预加载和正常加载的区别:

  • 正常加载可以认为是并行加载,同一个时间可以加载多个文件;
  • 等其他资源加载完毕,浏览器空闲的时候,在加载;
  • 目前预加载的方式只有在比较高版本的浏览器才适用;

本章结束!

results matching ""

    No results matching ""